import { ExtractPropTypes, PropType } from 'vue'
import { RenderType } from './enum'

// props属性
export const customChatProps = {
	// 接口地址
	url: {
		type: String,
		default: '',
		required: true,
	},

	// 请求类型
	method: {
		type: String,
		default: 'post',
	},

	// 是否流式数据
	isStream: {
		type: Boolean,
		default: true,
	},

	// 请求头
	headers: {
		type: Object as PropType<Record<string, unknown>>,
		default: {},
	},

	// 消息列表
	defaultList: {
		type: Array as PropType<Msg[]>,
		default: () => [],
	},

	// 是否展示回复消息底部的控制区域
	showReplyMsgCtrl: {
		type: Boolean,
		default: true,
	},

	// 数据的渲染方式
	renderType: {
		type: String as PropType<RenderType>,
		default: '',
		required: true,
	},
	// 头像
	avatar: {
		type: Object as PropType<{ user?: string; reply?: string }>,
		default: {
			user: '', // 用户头像
			reply: '', // 回复方头像
		},
	},
	// 思考的提示文案
	thinkText: {
		type: String,
		default: '思考中...',
	},
}
export type CustomChatProps = ExtractPropTypes<typeof customChatProps>

// 消息体
export type Msg = {
	msgType: string // 消息类型
	sender: string // 发送者
	content: any // 消息内容
	thinkStatus: boolean // 思考中状态
	answerStatus: boolean // 回答中状态
	[key:string]:any // 其他属性
}

// 事件
export const customChatEmits = {
	['update:msgLoadStatus']: (value: boolean): any => value, // 消息加载状态
	onMsgEnd: (): any => {}, // 问题回复完成
	onReAnswer: (msg: Msg): Msg => msg, // 重新回答
}
export type CustomChatEmits = typeof customChatEmits
